﻿// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include "include/SNSDK.h"

#ifdef SDK_X86
#pragma comment(lib,"./dll/x86/SNSDK.lib")
#else
#pragma comment(lib,"./dll/x64/SNSDK.lib")
#endif



int main()
{
	SN_RESULT pResult = { 0 };

	char* pKey = (char*)"SNKJ86RYDBY1YxafpLG3ep1R6NHFYLjz2UFFcE8Lx9Tq";
	//1.创建句柄
	HANDLE pHandle = apiSNCreateHandle(pKey,NULL, &pResult);
	if (!pHandle)
	{
		printf("error code:%d message:%s \n", pResult.code, pResult.message);
		return -__LINE__;
	}

	//获取卡密到期时间
	char* pTime = apiSNGetKeyExpiresTime(pHandle, &pResult);
	if (pTime)
		printf("卡密到期时间:%s \n", pTime);


	//设置轨迹参数，默认5倍速，根据自身需求设置
	// 轨迹密度density调节 ,density必须大于或者等于 1，默认 5,举个例子：假如轨迹有100个点,耗时1000毫秒，设置 density 如下：
	//		density = 1  时，轨迹有 100/1=100 个点，整个轨迹累计耗时 1000/1=1000 毫秒 （默认 1  倍速度）
	//		density = 2  时，轨迹有 100/2=50  个点，整个轨迹累计耗时 1000/2=500  豪秒 （等价 2  倍速度）
	//		density = 3  时，轨迹有 100/3=33  个点，整个轨迹累计耗时 1000/3=333  豪秒 （等价 3  倍速度）
	//		density = 5  时，轨迹有 100/5=20  个点，整个轨迹累计耗时 1000/5=200  豪秒 （等价 5  倍速度）
	//		density = 20 时，轨迹有 100/20=5  个点，整个轨迹累计耗时 1000/20=50  豪秒 （等价 20 倍速度）
	int ret2 = apiSNSetTrackParams(pHandle, 5, 0);
	if (ret2 != 0)
	{
		printf("error code:%d  \n", ret2);
		return -__LINE__;
	}

	//2.获取轨迹
	SN_POINT startPoint = { 100,100 };  //开始坐标
	SN_POINT endPoint = { 800,800 };    //结束坐标
	SN_POINT_PARAMS track[4096] = { 0 };//轨迹
	//轨迹类型，0 为绝对坐标 ，1为相对坐标
	int type = 0;
	int ret = apiSNMouseMove(pHandle, &startPoint, &endPoint, type, track);
	if (ret != 0)
	{
		printf("error code:%d message:%s \n", pResult.code, pResult.message);
		return -__LINE__;
	}

	//3.鼠标根据轨迹移动,轨迹最后一个点（10000，10000）
	for (int i = 0; i < 4096; i++)
	{
		struct SN_POINT point = track[i].point;
		if (point.x == 10000 && point.y == 10000)//轨迹最后一个点（10000，10000）
			break;
		printf("x:%d y:%d delay_time:%d \n", point.x, point.y, track[i].delayTime);
	}
#if 0
	if (type == 1)//如果是相对坐标，验证结果
	{
		int endX = startPoint.x;
		int endY = startPoint.y;

		for (int i = 0; i < 4096; i++)
		{
			struct SN_POINT point = track[i].point;

			if (point.x == 10000 && point.y == 10000)//轨迹最后一个点（10000，10000）
				break;
			endX += point.x;
			endY += point.y;
			printf("x:%d y:%d delay_time:%d \n", point.x, point.y, track[i].delayTime);
		}

		printf("endX:%d endY:%d \n", endX, endY);
	}
#endif
	//4.释放内存
	ret = apiSNDestroyHandle(pHandle);
	return 1;
}
